import os 
import random                                       #随机数字设置
import shutil
import concurrent.futures
from tqdm import tqdm
from see_path import *

class data_random:
    '''数据集随机'''
    def __init__(self,mkdir_path):    
        self.file_name = os.listdir(mkdir_path)     #获取图片文件夹内部所有文件
        self.mkdir_path = mkdir_path                #把路径传递下去
    def files_path(self):
        '''获取到正确的路径'''
        val_frac = 0.2                              #测试集比例
        file_name = self.file_name                  #获得所有的文件名
        random.seed(123)                            #随机种子
        random.shuffle(file_name)                   #随机打乱
        val_number = int(len(file_name)*val_frac)   #测试集文件数
        train_files = file_name[val_number:]        #训练集文件列表
        val_files = file_name[:val_number]          #验证集文件名列表
        val_path = os.path.dirname(os.path.dirname(self.mkdir_path)) #返回上一级的文件夹,images目录
        val_path = os.path.join(val_path,'val','')  #这里拼接出来的路径会有相反的斜杠
        os.makedirs(val_path,exist_ok=True)         #创建一个val目录,存在也不会报错
        print(val_path)
        return val_files,val_path              

    def run(self):
        '''运行函数'''
        val_files,new_val_path = self.files_path()  #接收一下函数的返回值
        try:
            #按照比例把训练集的图片放入验证集
            for i in tqdm(val_files):               #加了一个进度条                                            #遍历文件
                file_path = os.path.join(self.mkdir_path,i)                               #获取到文件的绝对路径
                # print(file_path)
                shutil.move(file_path,new_val_path) #移动文件,第一个地址移动到第二个地址
            return('已完成')
        except:
            print('文件已存在')


if __name__ == "__main__":
    mkdir_path1 = select_mkdir(initialdir="C:\\桌面\\",title="选择图片")          #弹出选择文件框
    mkdir_path2 = select_mkdir(initialdir="C:\\桌面\\",title="选择标注文件")       #弹出选择文件框
    data_img = data_random(mkdir_path1)
    data_txt = data_random(mkdir_path2)

    # 创建一个线程池
    with concurrent.futures.ThreadPoolExecutor() as executor:
        # 提交任务给线程池
        future1 = executor.submit(data_img.run)
        future2 = executor.submit(data_txt.run)

        # 获取任务的结果
        result1 = future1.result()
        result2 = future2.result()

        print(result1)  # 输出：25
        print(result2)  # 输出：100




